namespace Admin2025.Domain.Repositories;

/// <summary>
/// 通用仓储接口，定义基本的数据操作方法。
/// </summary>
/// <typeparam name="T">实体类型。</typeparam>
public interface IRepository<T>
{
    /// <summary>
    /// 获取所有实体列表。
    /// </summary>
    /// <returns>实体集合。</returns>
    Task<IEnumerable<T>> GetAllAsync();

    /// <summary>
    /// 根据主键ID获取实体。
    /// </summary>
    /// <param name="id">实体ID。</param>
    /// <returns>实体对象或null。</returns>
    Task<T?> GetByIdAsync(Guid id);

    /// <summary>
    /// 新增实体。
    /// </summary>
    /// <param name="entity">要新增的实体。</param>
    /// <returns>新增后的实体。</returns>
    Task<T> CreateAsync(T entity);

    /// <summary>
    /// 更新实体。
    /// </summary>
    /// <param name="entity">要更新的实体。</param>
    Task UpdateAsync(T entity);

    /// <summary>
    /// 删除实体。
    /// </summary>
    /// <param name="entity">要删除的实体。</param>
    Task DeleteAsync(T entity);
}